package com.hshit.downloader.io;

import org.json.JSONException;
import org.json.JSONObject;

import com.hshit.downloader.utils.Constants;

public class JSONResponse {
	private JSONObject mData;
	private String mRawString;
	/**
	 * 
	 * @param rawString
	 * @throws JSONException
	 */
	public JSONResponse() throws JSONException {
		
	}
	
	/**
	 * Unwrap the first layer of response
	 * @throws JSONException
	 */
	private void unwrap() throws JSONException {
		JSONObject object = new JSONObject(getRawString());
		
		if (object.has(Constants.VIDEO_DATA_OBJECT)) {
			setData(object.getJSONObject(Constants.VIDEO_DATA_OBJECT));
		}
	}
	
	// ========================================================================
	// Getters & setters
	// ========================================================================
	public String getRawString() {
		return mRawString;
	}

	public void setRawString(String mRawString) throws JSONException {
		this.mRawString = mRawString;
		unwrap();
	}
	
	public JSONObject getData() {
		return mData;
	}
	
	private void setData(JSONObject data) {
		this.mData = data;
	}
	
	// ========================================================================
	// Static parser
	// ========================================================================
	public static final int fetchInt(JSONObject object, String name, int defValue) {
		try {
			return object.has(name) && object.get(name) != JSONObject.NULL 
					? object.getInt(name) : defValue;
		} catch (JSONException e) {
			e.printStackTrace();
			return defValue;
		}
	}
	public static final String fetchString(JSONObject object, String name, String defValue) {
		try {
			return object.has(name) && object.get(name) != JSONObject.NULL 
					? object.getString(name) : defValue;
		} catch (JSONException e) {
			e.printStackTrace();
			return defValue;
		}
	}
}
